<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 
        ES6 引入了一种新的原始数据类型 Symbol, 表示独一无二的值。它是javascript的第七种数据类型,是一种类似字符串的数据类型
        特点
            1.Symbol 的值是唯一的,用来解决命名冲突问题
            2.Symbol 值不能与其他数据进行运算
            3.Symbol 定义的对象属性不能使用 for...in 循环遍历, 但是可以用Reflect.ownKeys来获取对象的所以键名

     -->


    <script>

       // 1. Symbol.hasInstance: 当其他对象使用 instanceof 运算符, 判断是否为该对象的实例时,会调用这个方法
       class Person {
            // 可以将参数传进来
            static [Symbol.hasInstance] (param) {
                console.log('我被用来检测类型',param)
                // 可以根据结果返回类型检测 
                // return true/false
            }
        }

        let o = {}
        console.log(o instanceof Person)

        // 2. Symbol.isConcatSpreadable: 对象的Symbol.isConcatSpreadable属性等于是一个布尔值,
        // 表示该对象用于Array.prototype.concat()时,是否可以展开

        const arr = [1,2,3]
        const arr2 = [4,5,6]
        arr2[Symbol.isConcatSpreadable] = false
        console.log(arr.concat(arr2))
    </script>
</body>
</html>